#include "StdAfx.h"
#include <iostream>
#include "IniReader.h"

CIniReader::CIniReader(const char* szFileName)
{
	memset(m_szFileName, 0x00, 255);
	memcpy(m_szFileName, szFileName, strlen(szFileName));
}
int CIniReader::ReadInteger(const char* szSection, char* szKey, int iDefaultValue)
{
	int iResult = GetPrivateProfileInt(szSection,  szKey, iDefaultValue, m_szFileName); 
	return iResult;
}
double CIniReader::ReadFloat(const char* szSection, char* szKey, float fltDefaultValue)
{
	char szResult[255];
	char szDefault[255];
	double fltResult;
	sprintf_s(szDefault, "%f",fltDefaultValue);
	GetPrivateProfileString(szSection,  szKey, szDefault, szResult, 255, m_szFileName); 
	fltResult =  atof(szResult);
	return fltResult;
}
bool CIniReader::ReadBoolean(const char* szSection, char* szKey, bool bolDefaultValue)
{
	char szResult[255];
	char szDefault[255];
	bool bolResult;
	sprintf_s(szDefault, "%s", bolDefaultValue? "True" : "False");
	GetPrivateProfileString(szSection, szKey, szDefault, szResult, 255, m_szFileName); 
	bolResult =  (strcmp(szResult, "True") == 0 || strcmp(szResult, "true") == 0) ? true : false;
	return bolResult;
}

char* CIniReader::ReadString(const char* szSection, char* szKey, const char* szDefaultValue)
{
	char* szResult = new char[255];
	memset(szResult, 0x00, 255);
	GetPrivateProfileString(szSection,  szKey, szDefaultValue, szResult, 255, m_szFileName); 
	return szResult;
}

char* CIniReader::ReadSection(const char* szSection)
{
	char* szResult = new char[4096];
	memset(szResult, 0x00, 4096);
	DWORD ret = GetPrivateProfileSection(szSection,  szResult, 4096, m_szFileName);
	ASSERT(ret < 4096-2);	// If the buffer is not large enough to contain all the key name and value pairs associated with the named section, the return value is equal to nSize minus two.
	return szResult;
}
